# # 作业一
#  利用map批量检测用户名是否符合规范=> username符合规范, username不符合规范
#   只能包含数字、字母、下划线，不以数字开头，长度在6-18之间
import re

#"soeirf2450 23w4095rref"
usernames = ["12dadadaf","dwe34_@34d","fefew324423423423432","fwe2432_#$@23r","dsfsd324dsd_"]
def func1(item):
    if re.findall(r"^[A-Za-z_][A-Za-z0-9_]{5,17}$",item):
        return f"{item}符合规范"
    else:
        return f"{item}不符合规范"
usernamesed = map(func1,usernames)
print(list(usernamesed))
#  filter把合法的用户名显示出来
print(list(filter(lambda x:re.findall(r"^[A-Za-z_][A-Za-z0-9_]{5,17}$",x),usernames)))
#  匿名函数+reduce实现 1*2*3*...*n
# from functools import reduce
# def func2(n):
#     if n > 1:
#         print(reduce(lambda x,y:x * y,range(1,n+1)))
#     elif n == 1 or n == 0:
#         print(1)
#     else:
#         print("输入有误")
# func2(10)
# #  filter函数:找出[1-100]能被3整除的数
# print(list(filter(lambda x:(x/3).is_integer(),range(1,101))))
# #  map函数:求list[1-10]各项的平方
# print(list(map(lambda x:x**2,range(1,11))))
# #  将列表[1,4,5,9] 转换成 '1459'的字符串
# print("".join((str(i) for i in [1,4,5,9])))
# print(type("".join((str(i) for i in [1,4,5,9]))))

# # # 作业二
# #  有以下列表：list1=[7, -8, 5, 4, 0, -2, -5]
# # • 正数在前负数在后
# # • 整数从小到大
# # • 负数从大到小
# list1 = [7, -8, 5, 4, 0, -2, -5]
# list2 = [7, -8, 5, 4, 0, -2, -5,40]
# # 仅在此题符合，若列表中有大于30的整数则不成立
# print(sorted(list1,key=lambda x: x*-10+10 if x <= 0 else x))
# #  这是一个字符串排序，排序规则：小写<大写<奇数<偶数
# # • s = 'asdf234GDSdsf23' #排序:小写-大写-奇数-偶数
# # • 原理：先比较元组的第一个值，FALSE
# s = 'asdf234GDSdsf23'
# # 提取小写lst1
# lst1 = list(filter(lambda x:x.islower(),s))
# # 提取大写lst2
# lst2 = list(filter(lambda x:x.isupper(),s))
# # 将字符串转为元组
# tuple1 = tuple(s)
# # 新建空列表存放数字字符
# lst = []
# for i in tuple1:
#     if i.isdigit():
#         lst.append(i)
# # 提取奇数lst3
# lst3 = list(filter(lambda x:int(x)%2 == 1,lst))
# # 提取偶数lst4
# lst4 = list(filter(lambda x:int(x)%2 == 0,lst))
# print(lst1+lst2+lst3+lst4)
